Socket 통신
NOTE
소켓 통신의 기초와 동기/비동기 · 블로킹/논블로킹 개념 정리.
NOTE
원문을 AI가 검토·보강함(사실 확인 권장).
📌 개념
Windows 소켓 (winsock2.h)
WSAStartup(버전, pointer)== 0 이면 성공(success)socket(AF_INET, SOCK_STREAM, protocol)⇒ IPv4, TCP/IP 프로토콜 이용
동기 vs 비동기
NOTE
작업 완료 여부에 신경을 쓰냐 / 안 쓰냐의 차이
- 동기: 작업이 끝나는 것과 시작이 순차적 흐름으로 이어짐 (순차적인 흐름만 지켜지면 됨)
- 비동기: 시작과 종료 시점이 일치하지 않음
블로킹 vs 논블로킹
NOTE
제어권이 누구에게 있냐? (제어권 = 코드 흐름의 주체)
- 블로킹: 자신의 작업을 진행하다 다른 주체의 작업이 시작되면, 그 주체가 끝날 때까지 기다렸다가 자신의 작업 수행
- 논블로킹: A 함수가 B 함수를 호출해도 기다리지 않고 자신의 작업을 계속 수행
조합 (동기/비동기 + 블로킹/논블로킹)
- sync + 블로킹: 제어권이 넘어가면 기다림
- sync + 논블로킹: 제어권이 안 넘어가고 B 함수 결과가 나왔는지 중간중간 물어봄
mutex⇒ thread 동기화를 도와주는 함수 (sync 부분 → 계속 질의)- 공유 자원 공간에 대한 접근 시간 제어
- async + 논블로킹: B 함수 호출 시 callback 함수도 같이 넘김 (완료 시 callback으로 A 함수에 통보)
- async + 블로킹: callback을 전달하나 B 함수가 끝날 때까지 대기 (sync+블로킹과 성능차가 없어 잘 사용하지 않음)
NOTE
MUTEX vs SPINLOCK
- MUTEX: 다른 프로세스가 진행 중이면 기다림 + 프로세스가 끝난 걸 알려줘야 실행
- SPINLOCK: 다른 프로세스를 기다리는 것은 동일하나, 끝나는 즉시 바로 진행
예시 시나리오 (화장실 자물쇠 비유)
- A: 자물쇠 확인 → 화장실 들어감
- 화장실: 좌물쇠 잠금(A) → 용무 시작
- B: 화장실 진입 시도 → 자물쇠가 잠겨 있어 기다림
- 스핀락: 밖에서 계속 기다림 (풀렸는지 반복 확인)
- 뮤텍스: 화장실 밖에서 잠듦 (통지를 받을 때까지 대기)
- 화장실: 용무 마무리 → 자물쇠를 품(A) → 화장실에서 나감
- 뮤텍스: A가 화장실 밖에서 잠든 B를 깨움
- 스핀락: B가 바로 자물쇠를 확인해 곧장 잠금
- 화장실: 좌물쇠 잠금(B) → 용무 시작 → 용무 마무리 → 자물쇠를 품(B) → 화장실에서 나감